package org.jsola.hr.dao;

import org.apache.ibatis.annotations.Param;
import org.jsola.hr.entity.GroupCompanyDO;
import org.jsola.hr.query.EmpBySiteQuery;
import org.jsola.hr.vo.*;
import org.jsola.hr.vo.excel.ChildCompanyExportVO;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author 董硕
 */
@Repository("statisticsPageDao")
public interface IStatisticsPageDao {
    /**
     * 员工概览,数量
     *
     * @param siteId 站点Id
     * @return 统计信息
     */
    StatisticsPageVO selectStatisticsCount(String siteId);

    /**
     * 查询用工单位数量
     *
     * @param siteId 站点Id
     * @param name   用工单位名称
     * @param ids    用工单位Id列表
     * @return 统计信息
     */
    List<CompanyListVO> selectComanyAndEmpCount(@Param("siteId") String siteId, @Param("name") String name, @Param("ids") List<String> ids);

    /**
     * 查询员工信息
     *
     * @param empBySiteQuery 查询参数
     * @param siteId         站点Id
     * @return 统计信息
     */
    List<StatisticsEmpInfoVO> selectAllStaff(@Param("empBySiteQuery") EmpBySiteQuery empBySiteQuery, @Param("siteId") String siteId);

    /**
     * 导出Excel
     *
     * @param name   分公司名称
     * @param siteId 站点Id
     * @param ids    分公司Id列表
     * @return 统计信息
     */
    List<ChildCompanyExportVO> forExport(@Param("name") String name, @Param("siteId") String siteId, @Param("ids") List<String> ids);

    /**
     * 合同详情列表
     *
     * @param companyId 公司名称
     * @param name      员工姓名
     * @return 统计信息
     */
    List<EmpContractInfoVO> empContractInfoList(@Param("companyId") String companyId, @Param("name") String name);

    /**
     * 查询分公司
     *
     * @param companyId 公司Id
     * @param name      用户名称
     * @param siteId    站点Id
     * @return 统计信息
     */
    List<ChildCompanyAdminVO> getChildCompanyAdmin(@Param("companyId") String companyId, @Param("name") String name,
                                                   @Param("siteId") String siteId);

    /**
     * 根据姓名电话查询公司
     *
     * @param companyId 公司Id
     * @param name      公司名称
     * @param siteId    站点Id
     * @return 统计信息
     */
    List<GroupCompanyDO> getCompanyByNameAndPhone(@Param("companyId") String companyId, @Param("name") String name,
                                                  @Param("siteId") String siteId);

    /**
     * 合同数量
     *
     * @param dateStart     开始时间
     * @param dateEnd       结束时间
     * @param siteId        站点Id
     * @param companyIdList 公司Id列表
     * @return 统计信息
     */
    List<StatisticsEmpInfoContractCountVO> StatisticsEmpInfoContractCount(@Param("dateStart") String dateStart,
                                                                          @Param("dateEnd") String dateEnd,
                                                                          @Param("companyIdList") List<String> companyIdList,
                                                                          @Param("siteId") String siteId);

    /**
     * 员工教育信息
     *
     * @param siteId        站点Id
     * @param companyIdList 公司Id列表
     * @return 统计信息
     */
    EmpEduCountVO empEduCount(@Param("companyIdList") List<String> companyIdList,
                              @Param("siteId") String siteId);


    /**
     * 查询导出Excel的员工数据
     *
     * @param empBySiteQuery 查询参数
     * @param siteId         站点Id
     * @return 统计结果
     */
    List<StatisticsEmpInfoVO> selectAllStaffExport(@Param("empBySiteQuery") EmpBySiteQuery empBySiteQuery,
                                                   @Param("siteId") String siteId);


    /**
     * 动态查询导出Excel的员工数据
     *
     * @param empBySiteQuery 查询参数
     * @param sqlString      拼接的sql字符串
     * @param idList         员工Id列表
     * @param siteId         站点Id
     * @return 统计信息
     */
    List<Map<String, String>> selectAllStaffExportDynamic(@Param("empBySiteQuery") EmpBySiteQuery empBySiteQuery,
                                                          @Param("sqlString") String sqlString,
                                                          @Param("idList") List<String> idList,
                                                          @Param("siteId") String siteId);
}
